package cn.dduan.fool.data.type.reference;

/**
 * 接口
 *
 * 优点：
 * 1、接⼝的⽅法默认是 public
 * 2、所有⽅法在接⼝中不能有实现(Java 8 开始接⼝⽅法可以有默认实现）
 * 3、接⼝中除了 static 、 final 变量，不能有其他变量
 * 4、⼀个类可以实现多个接⼝，接⼝⾃⼰本身可以通过extends 关键字扩展多个接⼝。
 *
 * jdk7~jdk9 Java 中接⼝的变化：
 * 1、在 jdk 7 或更早版本中，接⼝⾥⾯只能有常量变量和抽象⽅法。这些接⼝⽅法必须由选择实现接⼝的类实现
 * 2、jdk 8 的时候接⼝可以有默认⽅法和静态⽅法功能
 * 3、jdk 9 在接⼝中引⼊了私有⽅法和私有静态⽅法
 * 
 * @author dduan
 * @version 1.0       
 * @date 2024/8/27
 */
public interface MyInterface extends MyInterfaceOne, MyInterfaceTwo {
    /**
     * 接口默认方法
     *
     * @param
     * @return void
     * @author dduan
     * @version 1.0
     * @date 2024/8/27
     */
    default void fun() {
        System.out.println("MyInterface");
    }

}

interface MyInterfaceOne {
    /**
     * 接口中的final变量
     */
    final String name = "MyInterfaceOne";

    void funOne();
}

interface MyInterfaceTwo {
    /**
     * 接口中的static变量
     */
    static String code = "MyInterfaceTwo";

    void funTwo();
}

/**
 * 实现MyInterface接口
 * 
 * @author dduan
 * @version 1.0       
 * @date 2024/8/27
 */
class MyInterfaceImpl implements MyInterface {

    @Override
    public void funOne() {
        System.out.println("执行funOne()");
    }

    @Override
    public void funTwo() {
        System.out.println("执行funTwo()");
    }

    public static void main(String[] args) {
        MyInterfaceImpl myInterface = new MyInterfaceImpl();
        myInterface.funOne();
        myInterface.funTwo();

        System.out.printf("输出接口中的变量name：%s%n", MyInterface.name);
        System.out.printf("输出接口中的变量code：%s%n", MyInterface.code);
    }
}

